package com.jt.common.controller;

import java.net.BindException;

import org.apache.shiro.ShiroException;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authz.AuthorizationException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import com.jt.common.vo.JsonResult;

@ControllerAdvice
public class ControllerExceptionHandler {
	
	
	/*我们写的代码中并没有很好的处理业务异常，有些业务逻辑异常，我们没有处理，都会走下面的异常处理，比如参数问题，有些参数数据库里要求必须是数字
	 * 但是我们对客户端提交的数据未加验证，都会走这里，这里会提示系统维护中，稍后再试，然后事实并不是系统问题，而是用户自身输入参数非法，所以需要
	 * 更精准的处理业务逻辑异常，需要我们考虑全面
	 * */
	@ExceptionHandler(ShiroException.class)
	@ResponseBody
	public JsonResult doHandleShiroException(ShiroException e) {
		e.printStackTrace();//记录日志
		JsonResult jsonResult=new JsonResult("shiro权限异常");
		jsonResult.setState(0);
		if(e instanceof AuthenticationException){
			jsonResult.setMessage("用户名或密码不正确2");
			return jsonResult;
		}else if(e instanceof AuthorizationException ){
			jsonResult.setMessage("你无权执行该操作");
			return jsonResult;
		}
		//发短信给运维人员
		return new JsonResult("权限异常");
	}
	@ExceptionHandler({ Exception.class })
	@ResponseBody
	public JsonResult doHandleException(Exception e) {
		e.printStackTrace();
		if(e instanceof org.springframework.validation.BindException){
			return new JsonResult("提交的参数格式不正确");
		}
		return new JsonResult(e);
	}
	@ExceptionHandler(Throwable.class)
	@ResponseBody
	public JsonResult doHandleSysException(Throwable e) {
		e.printStackTrace();//记录日志
		//发短信给运维人员
		return new JsonResult("系统维护中，稍后再试");
	}
}
